#!/usr/bin/env python
# -*- coding:utf-8 -*-

import datetime

from sqlalchemy import Column, Integer, String, DateTime, UniqueConstraint, Index
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base

# 基础类
Base = declarative_base()

# 创建引擎
engine = create_engine(
    # "mysql+pymysql://root@127.0.0.1:3306/db1?charset=utf8",
    "mysql+pymysql://root:root@127.0.0.1:3306/db1?charset=utf8",  # 有密码时
    max_overflow=0,  # 超过连接池大小外最多创建的连接
    pool_size=5,  # 连接池大小
    pool_timeout=30,  # 池中没有线程最多等待的时间，否则报错
    pool_recycle=-1  # 多久之后对线程池中的线程进行一次连接的回收（重置）
)


class Users(Base):
    __tablename__ = 'users'

    id = Column(Integer, primary_key=True, comment="主键")
    name = Column(String(32), index=True, nullable=False, comment="名字")
    age = Column(Integer, nullable=False, comment="年龄")
    phone = Column(String(11), comment="手机")
    addr = Column(String(64), nullable=True, comment="地址")
    create_time = Column(DateTime, default=datetime.datetime.now, comment="创建时间")  # 一定不要加括号

    __table_args__ = (
        UniqueConstraint("id", "name"),  # 创建联合唯一 可指定name给个别名
        Index("phone", "addr", unique=True),  # 创建联合唯一索引  可指定name给个别名
    )

    def __str__(self):
        return "object:<id:%s name:%s>" % (self.id, self.name)


def create_tb():
    """
    创建表
    :return:
    """
    Base.metadata.create_all(engine)


def drop_tb():
    """
    删除表
    :return:
    """
    Base.metadata.drop_all(engine)


if __name__ == '__main__':
    drop_tb()
    create_tb()
